DV 26 - Power Macintosh Ç≈Çà ataManager ÇÃåƒÇ—èoǵ

(97 îN 1 åé 31 ì˙)

Q: åªç›ÅAPower Macintosh ÉRÉìÉsÉÖÅ[É^Çà ATA ÉoÉXÇ…ëŒâûǵÇΩÉhÉâÉCÉoÇäJî≠ǵǃǢNjÇ∑ÅBǵǩǵÅAÇÌÇÍÇÌÇÍÇà ETO ÉfÉBÉXÉNÇ…ëŒÇ∑ÇÈÉäÉìÉNÉâÉCÉuÉâÉäÇå©Ç¬ÇØÇÈDZÇΔÇ™Ç≈Ç´Ç‹ÇπÇÒÅBÉwÉbÉ_ÉâÉCÉuÉâÉäÇÕdžÇÈÇÃÇ≈Ç∑Ç™ÅAÉäÉìÉNÇ∑Ç◊ǴLJÇÃÇ™å©Ç¬Ç©ÇËÇ‹ÇπÇÒÅB

A: è≠Ç»Ç≠ÇΔLJÅA68K ÉRÅ[ÉhÇèëǢǃǢÇÈÇÃÇ»ÇÁÅAÉäÉìÉNÇ∑Ç◊Ç´ÉâÉCÉuÉâÉäÇÕópà”Ç≥ÇÍǃǢNjÇπÇÒÅBPower Macintosh Çà ATA É}ÉlÅ[ÉWÉÉÇégópÇ∑ÇÈèÍçáÇÕÅAMixed Mode ÉOÉãÅ[ÇçÏê¨ÇµÇƒ ataManager ÇåƒÇ—èoÇ∑ïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÍÇÕéüÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅB

#include 
#include 

#define RESULT_OFFSET(type) ((sizeof(type) == 1) ? 3 : ((sizeof(type) == 2) ? 1 : 0))
#define TBTrapTableAddress(trapNum) (((trapNum & 0x03FF) << 2) + 0xE00)

pascal SInt16 ataManager(ataPB *pb)
{
    #ifdef applec
        #if sizeof(SInt16) > 4
            #error "Result types larger than 4 bytes are not supported."
        #endif
    #endif
    long    private_result;

    private_result =
CallUniversalProc(*(UniversalProcPtr*)TBTrapTableAddress(0xAAF1),
        kPascalStackBased
         | RESULT_SIZE(SIZE_CODE(sizeof(SInt16)))
         | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(pb))), pb);
    return *(((SInt16*)&private_result) + RESULT_OFFSET(SInt16));
}
--Vinnie Moscaritolo devsupport@apple.com

[ Technical Q&A's : Devices : DV26 ]